<!DOCTYPE html>
<html lang="en">
<head>
    <title>囧么肥事</title>
    <meta charset="UTF-8"/>
    <meta name="viewport"
          content="width=device-width,height=device-height,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="Content-Type" content="text/html;"/>
    <meta name="renderer" content="webkit">
    <!--解决页面加载网络图片的403问题 , 可以让img标签预加载网络图片-->
    <meta name="referrer" content="no-referrer" />

    <!--markdown S -->
    <link rel="stylesheet" type="text/css" href="../../static/css/export_setting_css.css"/>
    <link rel="stylesheet" type="text/css" href="../../static/css/markdown_preview_css.css"/>
    <!--markdown E -->

    <!--left bar tools css E-->
    <link rel="stylesheet" type="text/css" href="../../static/css/nav.css">
    <link rel="stylesheet" type="text/css" href="http://www.jq22.com/jquery/font-awesome.4.6.0.css">
    <!--left bar tools css E-->

    <!-- 滚动条 S -->
    <link rel="stylesheet" href="../../static/css/optiscroll.css">
    <!-- 滚动条 E -->
</head>
<body>
<div id="m-wrapper" class="m-wrapper optiscroll">
    <!-- top 锚点 -->
    <a id="top"></a>

    <!-- left bar tools S -->
    <div class="leftNav-item">
        <ul>
            <li>
                <i class="fa fa-location-arrow"></i>
                <a href="http://jiongmefeishi.gitee.io/monster-blog/" target="_blank" class="rota">个人网站</a>
            </li>

            <li title="Git">
                <i class="fa fa-code-fork" aria-hidden="true"></i>
                <a href="http://jiongmefeishi.gitee.io/monster-blog/" target="_blank" class="rota">Git Page</a>
            </li>

            <li lay-data="img" data-fooc="http://resource.zqtaotao.cn/wx/qrcode/jiongmefeishi.jpg">
                <i class="fa fa-comments-o"></i><a href="javascript:;" class="rota">公众号</a>
            </li>

            <li lay-data="img" data-fooc="http://resource.zqtaotao.cn/weixincode.png">
                <i class="fa fa-money"></i><a href="javascript:;" class="rota">小额打赏</a>
            </li>
            <li title="返回顶部" class="for-top">
                <i class="fa fa-arrow-up"></i>
                <a href="#top" class="rota">去顶部</a>
            </li>
        </ul>
    </div>
    <!-- left bar tools E -->

    <!--content S-->
    <div id="export_content"><div class="output_wrapper" id="output_wrapper_id"><h3 id="hk8sreplicaset9"><span>k8s初面考点ReplicaSet副本集极限9连击你懂了吗？</span></h3>
        <p><strong>k8s考点灵魂拷问9连击</strong></p>
        <pre><code class="hljs">考点之简单描述一下k8s副本集ReplicaSet有什么作用？<br></code></pre>
        <pre><code class="hljs">考点之为什么ReplicaSet将取代ReplicationController控制器？<br></code></pre>
        <pre><code class="hljs">考点之编写&nbsp;ReplicaSet&nbsp;的&nbsp;spec&nbsp;有什么需要注意的点？<br></code></pre>
        <pre><code class="hljs">考点之k8s集群中创建非模板&nbsp;Pod&nbsp;为什么可能会被副本集自动收纳？<br></code></pre>
        <pre><code class="hljs">考点之线上预警k8s集群循环创建、删除Pod副本，一直无法稳定指定目标副本数量?<br><br>如果排除了是Pod内部发生了故障，从RS角度你猜测可能是什么原因？<br></code></pre>
        <pre><code class="hljs">考点之标签Pod和可识别标签副本集ReplicaSet&nbsp;先后创建顺序不同，会造成什么影响？<br></code></pre>
        <pre><code class="hljs">考点之生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法？<br></code></pre>
        <pre><code class="hljs">考点之缩放&nbsp;RepliaSet&nbsp;有哪些算法策略？<br></code></pre>
        <pre><code class="hljs">考点之如何去影响淘汰策略，设置单独偏好？<br></code></pre>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/09932184de031d5e9783f69f497a2103.gif" alt="" title=""><figcaption></figcaption></figure>
        <h3 id="h"><span>囧么肥事-胡说八道</span></h3>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/23c293759d7fddbf59c0324d6b45e930.png" alt="" title=""><figcaption></figcaption></figure>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/c8c7b64c21f16e4714fd63062ea862c8.png" alt="" title=""><figcaption></figcaption></figure>
        <h3 id="hk8sreplicaset"><span>考点之k8s副本集ReplicaSet有什么作用？</span></h3>
        <p><code>ReplicaSet</code>的主要作用是控制副本数量的，这里的每一个副本就是一个<code>Pod</code>，<code>ReplicaSet</code>它是用来确保我们有指定数量的<code>Pod</code>副本正在运行的<code>Kubernetes</code>控制器，这里为了方便后面统一把<code>ReplicaSet</code>简称 RS。</p>
        <p><strong>进一步说什么是控制副本数量？</strong></p>
        <p>RS确保Pod以你指定的副本数运行，即如果有容器异常退出，会自动创建新的 Pod 来替代，而异常多出来的容器也会自动回收。</p>
        <p>假设k8s集群中，你想要运行10个Pod，如果这时候有4个Pod发生故障，异常退出，那么RS会自动创建新的4个Pod来替代发生故障的4个Pod。</p>
        <p>RS<strong>尽力保证</strong>系统当前正在运行的<code>Pod</code>数<strong>等于期望状态</strong>里指定的<code>Pod</code>数目。</p>
        <p>你想要10个，那么RS就尽可能保证在任何时候都给你提供10个，没有就创建，多了就删除。</p>
        <p><strong>总之，ReplicaSet 尽可能确保任何时间都有指定数量的 Pod 副本在运行。</strong></p>
        <h3 id="hreplicasetreplicationcontroller"><span>考点之为什么ReplicaSet将取代ReplicationController控制器？</span></h3>
        <p><code>ReplicationController</code>控制器（简称为RC）。</p>
        <p>在之前旧版本的k8s中，使用的是RC控制器实现了k8s集群的高可用性，它跟现在的RS控制器作用类似，作用是，确保Pod以指定的副本数运行。</p>
        <p>ReplicaSet继承了RC的功能，并实现了扩展，主要突出扩展是更强大的<strong>标签选择能力</strong> ，即selector。</p>
        <p><strong>进一步说什么是标签选择能力？</strong></p>
        <p><code>ReplicaSet</code>会通过标签选择器（<code>Label-Selecto</code>r）管理所有被打上与选择器匹配的标签的容器。</p>
        <p><strong>下面通过一段拟人对白，来理解什么是标签选择：</strong></p>
        <p>RS说：”嘿嘿，我要管理被打上 A，AA，AAA标签的Pod，都不许跑，听我指挥，排队站好，🧍🏻立正，向前看！“</p>
        <p>Pod-001说：”我被打上了BBB标签，我才不归你管呢！“</p>
        <p>Pod-002说：”我被打上了AA标签，快来接管我吧，我准备好了“</p>
        <p>Pod-003说：”呜呜，我想独立，我不想被RS管，我要做一个自由自在的孩子，但是不幸的是，我被打上了A标签，RS给我管的紧紧的，我失去了自由，我好可怜呀“</p>
        <p><code>ReplicationController</code>自己也有标签选择能力，但是它只能选择包含某个标签的匹配Pod；</p>
        <p>ReplicaSet的选择器在基础上增加了允许匹配缺少某个标签的pod，或包含特定标签名的Pod；</p>
        <p><strong>举个例子</strong></p>
        <p>两组Pod，env标签分别是<code>production</code>和<code>devel</code></p>
        <blockquote>
            <p>Pod-A     env=production</p>
            <p>Pod-B     env=devel</p>
        </blockquote>
        <p>RC 只能匹配其中的Pod-A或者Pod-B中的一个；</p>
        <p>RS 则可以同时可以匹配并将它们视为一个大组，无论标签env的值具体是什么（env=*）,都可以标签名来进行匹配；</p>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/5b5522ef70c7db3aa263b1243984b55e.png" alt="" title=""><figcaption></figcaption></figure>
        <h3 id="hreplicasetspec"><span>考点之编写 ReplicaSet 的 spec 有什么需要注意的点？</span></h3>
        <p>类似其他<code>Kubernetes API</code> 对象，RS也需要指定 <code>apiVersion</code>、<code>kind</code>、和 <code>metadata</code> 字段。</p>
        <ol>
            <li>对于 <code>ReplicaSets</code> 而言，其 <code>kind</code> 始终是 ReplicaSet。</li>
            <li><code>ReplicaSet</code> 对象的名称必须是合法的 DNS 子域名</li>
            <li>属性<code>.spec.template</code> 是一个Pod 模版， 要求设置标签，注意不要将标签与其他控制器的<code>标签选择器重叠</code></li>
            <li>属性<code>.spec.template.spec.restartPolicy</code> 指定模板的重启策略 ，允许的取值是 <code>Always</code></li>
            <li>属性<code>.spec.selector</code> 字段是一个<code>标签选择器</code> 用来筛选匹配标签的Pod归属</li>
            <li>在 ReplicaSet 中，<code>.spec.template.metadata.labels</code> 的值必须与 <code>spec.selector</code> 值 相匹配，否则该配置会被 API 拒绝。</li>
        </ol>
        <h3 id="hk8spod"><span>考点之k8s集群中创建非模板 Pod 为什么可能会被副本集自动收纳？</span></h3>
        <p>前面提到了，RS采用了最新的标签选择能力，通过指定<code>.spec.selector</code>标签选择器，不仅可根据标签值，甚至连标签名一致都可以进行匹配。</p>
        <p>首先如果采用Pod模板创建Pod，会被指定标签，<strong>RS会根据标签自动接管Pod</strong>。</p>
        <p><strong>再来看看非模板</strong></p>
        <p>非模板创建，其实就是直接创建裸的 Pods。</p>
        <p><strong>为什么可能会被副本集RS自动接管？</strong></p>
        <p>除非在创建裸Pod的时候，你确保这些裸的 Pods 并不包含可能与你的某个 ReplicaSet 的<code>.spec.selector</code>相匹配的标签。</p>
        <p>在创建裸Pods前，必须完全排除跟任何RS有可能相同的标签，否则，RS认为你创建的Pod 就是要指定给自己接管的。</p>
        <h3 id="hk8spodpodrs"><span>考点之线上预警k8s集群循环创建、删除Pod副本，一直无法稳定指定目标副本数量，排除了是Pod内部发生了故障，从RS角度你猜测可能是什么原因？</span></h3>
        <p>首先理解一下问题，循环创建Pod副本？</p>
        <p>RS一直在正常工作，维持Pod副本数量，缺少就创建，多了就删除。问题来了，一直创建，然后又删除，却不能稳定Pod副本数量？</p>
        <p>看下这个<strong>循环过程</strong></p>
        <pre><code class="hljs r">RS指定Pod副本数量<span class="hljs-number">10</span>个<br><br>当前副本<span class="hljs-number">7</span>个<br>RS检测不够<span class="hljs-number">10</span>个<br>RS开启平衡机制，创建<span class="hljs-number">2</span>个维持稳定<br><br>再检测发现&nbsp;<span class="hljs-number">15</span>个<br>RS开启平衡机制，删除<span class="hljs-number">5</span>个维持稳定<br><br>再检测发现<span class="hljs-number">13</span>个<br>RS开启平衡机制，删除<span class="hljs-number">3</span>个维持稳定<br><br>再检测发现<span class="hljs-number">9</span>个<br>RS开启平衡机制，增加<span class="hljs-number">1</span>个维持稳定<br><br>再检测发现<span class="hljs-number">10</span>个<br>无需稳定<br><br>再检测发现<span class="hljs-number">8</span>个<span class="hljs-keyword">...</span><br>再检测发现<span class="hljs-number">18</span>个<span class="hljs-keyword">...</span><br></code></pre>
        <p>总之，RS检测副本数量，不是比10个多，就是比10少，<strong>一直难以维持10个有效副本</strong>。</p>
        <p>既然排除了是Pod内部故障问题，那么从RS角度进行可能分析，可以初步判定是多个RS标签选择器规则重复导致的。</p>
        <p><strong>分析初步判定原因</strong></p>
        <p><code>ReplicaSet</code>会通过标签选择器（Label-Selector）管理所有带有与选择器匹配的标签的容器。</p>
        <p>创建<code>Pod</code>时，它会认为所有<code>Pod</code> 是一样的，是无状态的，所以在创建顺序上不会有先后之分。</p>
        <p>使用相同的标签选择器创建多个<code>ReplicaSet</code>，则多个RS无法识别哪个Pod是自己创建的，都会认为是归属于自己管理的Pod。</p>
        <p>例如</p>
        <pre><code class="hljs r">第一个&nbsp;RS-A，指定副本数量&nbsp;<span class="hljs-number">10</span><br>标签选择器可以匹配&nbsp;env=xxx<br><br>RS-A生成<span class="hljs-number">10</span>个Pod标签为&nbsp;env=xxx<br>一组Pod：<br>Pod-<span class="hljs-number">1</span>(env=xxx)<br>Pod-<span class="hljs-number">2</span>(env=xxx)<br>Pod-<span class="hljs-number">3</span>(env=xxx)<br><span class="hljs-keyword">...</span><br><span class="hljs-keyword">...</span><br>Pod-<span class="hljs-number">10</span>(env=xxx)<br><br><br>这时候创建了一个RS-B<br><br>第二个&nbsp;RS-B，指定副本数量&nbsp;<span class="hljs-number">25</span><br>标签选择器和&nbsp;RS-A&nbsp;相同<br>标签选择器可以匹配&nbsp;env=xxx<br><br><br>因为选择器匹配一样<br>RS-B&nbsp;匹配到了RS-A创建的<span class="hljs-number">10</span>个Pod<br>RS-B&nbsp;发现Pod-x（env=xxx）数量不够<span class="hljs-number">25</span><br><br>RS-B&nbsp;继续创建额外的<span class="hljs-number">10</span>个<br><br>Pod-<span class="hljs-number">11</span>(env=xxx)<br>Pod-<span class="hljs-number">12</span>(env=xxx)<br>Pod-<span class="hljs-number">13</span>(env=xxx)<br><span class="hljs-keyword">...</span><br><span class="hljs-keyword">...</span><br><br>此时RS-A&nbsp;发现自己匹配的Pod&nbsp;&gt;&nbsp;<span class="hljs-number">10</span><br>它认为是自己创建多了<br>启动平衡机制<br><br>删除超过&nbsp;<span class="hljs-number">10</span>&nbsp;个的额外Pod<br>删除&nbsp;Pod-Xi(env=xxx)<br><br>而RS-B&nbsp;发现自己匹配的Pod&nbsp;&lt;&nbsp;<span class="hljs-number">25</span><br>就启动平衡机制<br>创建&nbsp;Pod-Xi(env=xxx)<br><br><br><br>就这样<br>一个不停的创建<br>一个不停的删除<br><br>最终总是无法满足稳定数量的&nbsp;<span class="hljs-number">10</span>&nbsp;和&nbsp;<span class="hljs-number">25</span><br></code></pre>
        <p>双方的当前状态始终<strong>不等于期望状态，这就会引发问题</strong>，因此确保<code>ReplicaSet</code>标签选择器的唯一性这一点很重要。</p>
        <hr>
        <p>本期暂时讨论上述5点，下期完成下面4点</p>
        <pre><code class="hljs">考点之标签Pod和可识别标签副本集ReplicaSet&nbsp;先后创建顺序不同，会造成什么影响？<br></code></pre>
        <pre><code class="hljs">考点之生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法？<br></code></pre>
        <pre><code class="hljs">考点之缩放&nbsp;RepliaSet&nbsp;有哪些算法策略？<br></code></pre>
        <pre><code class="hljs">考点之如何去影响淘汰策略，设置单独偏好？<br></code></pre>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/ffe082865e945fb41a498ad0dbdcf6a9.gif" alt="" title=""><figcaption></figcaption></figure>
        <hr>
        <p><strong>《Kubernetes-企业级容器应用托管》-持续胡说八道</strong></p>
        <p>第一段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484066&amp;idx=1&amp;sn=441fcae466eb5b5fba2fa29f007d7c07&amp;chksm=cf31eb74f8466262ccc258fe1d21fbd8d65e73221c211b704d216d5116a15ffcc4f4cacf5b31#rd">【云原生新时代弄潮儿k8s凭什么在容器化方面独树一帜？】</a></p>
        <p>第二段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484077&amp;idx=1&amp;sn=2ba024c0e121f7ac83e7264bdf7b4dff&amp;chksm=cf31eb7bf846626d02c59837a2f903ed848d8e0f117c80af16b364e858005c57849f0bb82e47#rd">【趁着同事玩游戏偷偷认识k8s一家子补补课】</a></p>
        <p>第三段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484110&amp;idx=1&amp;sn=cae2e84fb16b9fe5d8a7727c20009b3b&amp;chksm=cf31eb18f846620e3dd1b7b8b9008fd5960363bc6bd3de679225ea5e45f9a48e93d210ccd572#rd">【Kubernetes家族容器小管家Pod在线答疑❓】</a></p>
        <p>第四段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484122&amp;idx=1&amp;sn=4f913c1e30808622e80a386aa6b4bef8&amp;chksm=cf31eb0cf846621a4cf5ba605ec6fe4141b244dd2b8c49311accba15909f426277d643b6aceb#rd">【同事提出个我从未想过的问题，为什么Kubernetes要"多此一举"推出静态Pod概念？】</a></p>
        <p>第五段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484133&amp;idx=1&amp;sn=116c23255e688ca1b86197689bcc8b72&amp;chksm=cf31eb33f8466225400e6bfaac74d5d26de91b85e8f475ecbebedfb8ae08ebd9dde91aec1177#rd">【探针配置失误，线上容器应用异常死锁后，kubernetes集群未及时响应自愈重启容器？】</a></p>
        <p>第六段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484143&amp;idx=1&amp;sn=5e764d67105c34bbaa4c851482dbe5cc&amp;chksm=cf31eb39f846622f8c0aa21afd5d33d3928073de71058d59f974c5498bf84da2681cf76582a8#rd">【kubernetes集群之Pod说能不能让我体面的消亡呀？】</a></p>
        <p>第七段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484153&amp;idx=1&amp;sn=2d6f43036cf2e4cea5fa2aebc4b67ebf&amp;chksm=cf31eb2ff846623904c34e84943576ccf1714d73e042bdc9a4ce584050caf3fc0a85ff5c8908#rd">【k8s家族Pod辅助小能手Init容器认知答疑？】</a></p>
        <p>第八段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484188&amp;idx=1&amp;sn=b8b06c4abe2f5d56556235f867ec10d0&amp;chksm=cf31eacaf84663dc0dd330e4b5d183c06a2c92f8a0e42c8c76b30d67e1ba90381f5bc7c5f780#rd">【k8s初面考点ReplicaSet副本集极限9连击你懂了吗？】</a></p>
        <p>第九段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484206&amp;idx=1&amp;sn=631183744568cd7756cb3d747595c479&amp;chksm=cf31eaf8f84663eed04cfdd2c04dd8f1522a3c5bf43cbf4a24dd2e3a335fc4189f1269627e8f#rd">【生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法？】</a></p>
        <p>第十段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484214&amp;idx=1&amp;sn=7a0a593abbcd34347351bcc3ecd6785a&amp;chksm=cf31eae0f84663f61600e14108ebd7b0db326d26d1f78ca7686e685c4de4728af80b54de3b4c#rd">【跟k8s工作负载Deployments的缘起缘灭】</a></p>
        <p>后续未更新？推荐休闲阅读：<a href="https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg3NjU0NDE4NQ==&amp;action=getalbum&amp;album_id=2218140423993212933#wechat_redirect">【囧么肥事】</a></p></div></div>
    <!--content E-->
</div>



</body>
<!--left bar tools js S-->
<script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
<script type="text/javascript" src="../../static/js/nav.js"></script>
<!--left bar tools js E-->

<!-- 滚动条 S -->
<script type="text/javascript" src="../../static/js/optiscroll.js"></script>
<!-- 滚动条 E -->

<!--commonjs S-->
<script type="text/javascript" src="../../static/js/common.js"></script>
<!--commonjs E-->

</html>
